/* 
 * options:参数对象
 * result:无
 * 
 * 注意：在使用本插件之前请导入history.js、jquery.js
 * */
function ShowSoftPC(options){
    var self = this;    
    self.options = {
    	bodyBox:".body-Box", 
    	defaultPage:""
    };   
    self.options = $.extend(self.options , options);
    self.base = {
        body:$("body"),        
        location:window.history.location || window.location        
    };
    //自动初始化
    self.init();    
}
/*初始化函数
* result:无
*/
ShowSoftPC.prototype.init = function(){
    var self = this;

    self.aLink(self.options.bodyBox , self.options.defaultPage);
}
/*获取URL中的参数
* result：参数组成的对象
*/
ShowSoftPC.prototype.getRequest = function() {
	var self = this;
	var urlArr = window.location.href.split("?");
    var url = urlArr[urlArr.length-1]; 
    var theRequest = new Object();
    if (self.isNotNull(url)) {
        theRequest = self.splitArgs(url);
    }
    return theRequest;
}
/*把字符串用&分割，并且用=分割键和值(主要用来获取类似url的参数的字符串)
* string: 需要切割的字符串
* result：键值组成的对象
*/
ShowSoftPC.prototype.splitArgs = function(string) {
    var self = this;
    var obj = {};
    strs = string.split("&");
    for(var i = 0; i < strs.length; i ++) {
        obj[strs[i].split("=")[0]]=unescape(strs[i].split("=")[1]);
    }
    return obj;
}
/* 重写window.location.href
 * href:页面的路径
 * domTitle:浏览器上方title
 * */
ShowSoftPC.prototype.myhref = function(href , domTitle) {
	var self = this;

	var title = domTitle;  
	var winUrl = window.location.href;
	var newUrl = winUrl.split("?")[0] + "?page=" + href;
	$(self.options.bodyBox).load(href);
	history.pushState({title:title}, title, newUrl);
};
/* 重写跳转,使用data-href替代原本的href,如果需要使用原生的跳转，请仍然使用a标签使用href属性
 * bodyBox:装载页面的容器
 * defaultPage:默认加载的页面，url中没有page参数或者参数为空，则加载默认页面
 * */
ShowSoftPC.prototype.aLink = function(bodyBox , defaultPage) {
	var self = this;
	self.base.body.delegate("[data-href]" , "click" , function(e){
		e.preventDefault();
		var that = $(this);
		var winUrl = window.location.href;
		var args = self.getRequest();
        var pageArgs = that.attr("data-json");
		var href = that.attr("data-href");
		var title = that.attr("data-domTitle");  
		var newUrl = winUrl.split("?")[0] + "?page=" + href;
		document.title = title;		
        if(self.isNotNull(pageArgs)){
            pageArgs = self.splitArgs(pageArgs);
            localStorage.pageArgs = JSON.stringify(pageArgs);
        }	
		if(self.isNotNull(href) && args.page != href){
			if(href=="rzDesigner.html"){
				var userObj;
				if(null!=localStorage.desAccount && "undefined"!=typeof(localStorage.desAccount)){
					userObj=$.parseJSON(localStorage.desAccount);
				}
				if("100"==location.designerPersent){
					$(bodyBox).load(href);
					history.pushState({title:title}, title, newUrl);
				}else{
					alert("请先完善个人资料!");
					$("[data-href='designerInf.html']").trigger('click');
					return ;
				}	
					
			}else if(href=="rzCorporation.html"){
				var userObj;
				if(null!=localStorage.qiyeAccount && "undefined"!=typeof(localStorage.qiyeAccount)){
					userObj=$.parseJSON(localStorage.qiyeAccount);
				}
				if("100"==location.corpotationPersent){
					$(bodyBox).load(href);
					history.pushState({title:title}, title, newUrl);
				}else{
					alert("请先完善企业资料!");
					$("[data-href='company-data.html']").trigger('click');
					return ;
				}
			}else{
				$(bodyBox).load(href);
				history.pushState({title:title}, title, newUrl);
			}
		}
	});
	$(window).bind("popstate", function() {   
		self.loadPage(bodyBox , defaultPage);
    });
    self.loadPage(bodyBox , defaultPage);
};
/* 利用replaceState重载页面
 * bodyBox:装载页面的容器
 * defaultPage:默认加载的页面，url中没有page参数或者参数为空，则加载默认页面
 * */
ShowSoftPC.prototype.loadPage = function(bodyBox , defaultPage) {
	var self = this;
	var args = self.getRequest();
	//如果含有page参数则加载page页面，否则加载默认的页面
	if(self.isNotNull(args.page)){
		$(bodyBox).load(args.page);
	}else{
		$(bodyBox).load(defaultPage);
	}
};
/*判断数组是否是空，对象是否是空，字符串是否是空
* value:需要判断的值；
* result: true表示值不为空，false表示值为空
*/
ShowSoftPC.prototype.isNotNull = function(value){
    var self = this;
    //值是否是空
    if(value != null){
        if(self.isNotNullStr(value) || self.isNotNullArr(value) || self.isNotNullObj(value)){
            return true
        }else{
            return false;
        }    
    }else{
        return false;
    }  
}

/*判断字符串是否是空
* value:需要判断的值；
* result: true表示值不为空，false表示值为空
*/
ShowSoftPC.prototype.isNotNullStr = function(value){
    var self = this;
    //值是否是空
    if(value != null){
        //值是否是对象（数组也是一个对象）
        if(typeof value == "number" ) value = value + "";
        if(typeof value == "string" && value.length > 0 && value.replace(/\s+/g,"").length > 0){
            return true; 
        }else{
           return false;  
        }        
    }else{
        return false;
    }     
}
/*判断数组是否是空
* value:需要判断的值；
* result: true表示值不为空，false表示值为空
*/
ShowSoftPC.prototype.isNotNullArr = function(value){
    var self = this;
    //值是否是空
    if(value != null){
        if(typeof value == "object" && value instanceof Array && value.length > 0){
            var hasProp = false; 
            for(var i = 0; i < value.length; i++){  
                if(self.isNotNull(value[i])){
                   hasProp = true;
                   break;
                }else{
                   hasProp = false;
                }   
            }
            if(hasProp){  
                return true;  
            }else{  
                return false;  
            }             
        }else{
           return false; 
        }             
    }else{
        return false;
    } 
    
}
/*判断对象是否是空
* value:需要判断的值；
* result: true表示值不为空，false表示值为空
*/
ShowSoftPC.prototype.isNotNullObj = function(value){
    var self = this;
    //值是否是空
    if(value != null){
        if(typeof value == "object" && !(value instanceof Array)){
            var hasProp = false; 
            //如果不是数组，是一个正常的对象
            for (var prop in value){  
                hasProp = true;  
                break;  
            }
            if(hasProp){  
                return true;  
            }else{  
                return false;  
            }           
        }else{
           return false; 
        }             
    }else{
        return false;
    } 
    
}

